<?php
// +----------------------------------------------------------------------
// |     【StaffMain】Controller 控制器
// +----------------------------------------------------------------------

declare (strict_types = 1);

namespace app\admin\controller\staff;

use think\facade\Request;
use app\common\service\StaffMain as S;
use app\common\model\StaffMain as M;

class Main extends  \app\admin\controller\Base
{
    protected $middleware = ['AdminCheck','AdminPermission'];

	//初始化
	public function initialize(){
		parent::initialize();
		
		$this->assign('controller_title','员工管理');
	}

    // 列表
    public function index(){
        if (Request::isAjax()) {
            return $this->getJson(M::getList());
        }
        return $this->fetch();
    }

    // 添加
    public function add(){
        if (Request::isAjax()) {
            return $this->getJson(S::goAdd(Request::post()));
        }
        
        // 1. 查询当前最大工号
        $lastCode = M::order('user_code', 'desc')->value('user_code');
        
        // 2. 如果没有记录则从 SH0001 开始
        if (empty($lastCode)) {
            $user_code = 'SH0001';
        } else {
            // 3. 验证工号格式（确保是 SH+数字）
            if (!preg_match('/^SH(\d+)$/', $lastCode, $matches)) {
                throw new Exception("现有工号格式错误: {$lastCode}，无法生成新工号");
            }
            
            // 4. 提取数字部分并自增
            $numberPart = $matches[1]; // 直接获取数字部分的字符串（如 "0001"）
            $newNumber = (int)$numberPart + 1; // 转为整数自增
            
            // 5. 生成新工号（动态保持数字位数）
            $user_code = 'SH' . str_pad(
                (string)$newNumber,      // 确保传入字符串
                strlen($numberPart),     // 动态匹配原有位数（如 4 → 0001 → 0002）
                '0',
                STR_PAD_LEFT
            );
        }
        
        $model = [
            'user_code'=>$user_code,
        ];
        
        return $this->fetch('edit',[
            'options'=>config_cache_file('options'),
            'model'=>$model,
			'action_up'=>false,
		]);
    }

    // 编辑
    public function edit($id){
        if (Request::isAjax()) {
            return $this->getJson(S::goEdit(Request::post(),$id));
        }
		
		$model=M::info(['id'=>$id]);
		if(!$model) $this->getJson(102);
        
		return $this->fetch('',[
			'action_up'=>true,
            'options'=>config_cache_file('options'),
			'model' => $model,
		]);
    }

    // 状态
    public function status($id){
        return $this->getJson(S::goStatus(Request::post(),$id));
    }

    // 删除
    public function remove($id){
        return $this->getJson(S::goRemove($id));
    }

    // 批量删除
    public function batchRemove(){
        return $this->getJson(S::goBatchRemove([
				['id','in',Request::post('ids')],
			]));
    }

    // 回收站
    public function recycle(){
        if (Request::isAjax()) {
            return $this->getJson(S::goRecycle());
        }
        return $this->fetch();
    }
	
    // 设置某个值
    public function setValue(){
        if (Request::isAjax()) {
            return $this->getJson(S::setFieldValue(Request::post()));
        }
        return $this->fetch();
    }
}
